package elib;

import java.sql.*;
import java.util.List;
import java.util.ArrayList;

public class Osoba {
	protected String imie;
	protected String nazwisko;
	protected String login;
	protected String haslo;
	protected long pesel;
	protected int prawaDostepu;
	/**
	 * Funkcja wyszukiwajaca rezerwacje w bazie dnaych
	 * @return zwraca liste znalezionych rezerwacji
	 */
	public List<Rezerwacje> wypiszRezerwacje() {
		List<Rezerwacje> listaRezerwacji = new ArrayList<Rezerwacje>();
		String queryRezerwacje = "SELECT idKlienta, idKsiazki, dataRezerwacji, "
				+"gotowosc, imie, nazwisko, tytul FROM Ksiazka, Klient, Rezerwacje "
				+"WHERE KlientidKlienta=idKlienta AND KsiazkaidKsiazki=idKsiazki";
		if(this instanceof Klient) {
			Klient tmp = (Klient) this;
			queryRezerwacje+=" AND idKlienta="+tmp.getId();
		}
		queryRezerwacje+=" ORDER BY dataRezerwacji;";
		//laczenie z baza danych i wykonanie zapytania
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection con = DriverManager.getConnection("jdbc:mysql://glass.elk.pl:3306/sql323890","mpigora","TTn9sez8cSXM6CNx");
			//Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sql323890", "root", "");
			Statement stmt = con.createStatement();
		    ResultSet rs = stmt.executeQuery(queryRezerwacje);
		    while (rs.next()) {
		    	listaRezerwacji.add(new Rezerwacje(
		    				Integer.parseInt(rs.getString("idKlienta")),
		    				Integer.parseInt(rs.getString("idKsiazki")),
		    				rs.getString("dataRezerwacji"),
		    				rs.getString("gotowosc"),
		    				rs.getString("imie")+" "+rs.getString("nazwisko"),
		    				rs.getString("tytul")
		    			));
		    }
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return listaRezerwacji;
	}
	/**
	 * Funkcja wyszukiwajaca wypozyczenia w bazie dnaych
	 * @return zwraca liste znalezionych wypozyczen
	 */
	public List<Wypozyczenia> wypiszWypozyczenia() {
		List<Wypozyczenia> listaWypozyczen = new ArrayList<Wypozyczenia>();
		String queryWypozyczenia = "SELECT idKlienta, idKsiazki, dataWypozyczenia, dataZwrotu, dataBezKary, "
				+"iloscPrzedluzen, imie, nazwisko, tytul, DATEDIFF(CURDATE(),dataBezKary) AS dniKary "
				+"FROM Ksiazka, Klient, Wypozyczenia WHERE KlientidKlienta=idKlienta AND KsiazkaidKsiazki=idKsiazki";
		if(this instanceof Klient) {
			Klient tmp = (Klient) this;
			queryWypozyczenia+=" AND idKlienta="+tmp.getId();
		}
		queryWypozyczenia+=" ORDER BY dataWypozyczenia DESC;";
		//laczenie z baza danych i wykonanie zapytania
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection con = DriverManager.getConnection("jdbc:mysql://glass.elk.pl:3306/sql323890","mpigora","TTn9sez8cSXM6CNx");
			//Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sql323890", "root", "");
			Statement stmt = con.createStatement();
			//pobranie z bazy danych informacji dotyczacych stawki kary
			ResultSet rs = stmt.executeQuery("SELECT stawka FROM Kara;");
	    	if(rs.next()) {
	    		Kara.setStawka(Float.parseFloat(rs.getString("stawka")));
	    	}
	    	//pobieranie danych dotyczacych wypozyczen
		    rs = stmt.executeQuery(queryWypozyczenia);
		    while (rs.next()) {
		    	listaWypozyczen.add(new Wypozyczenia(
		    				Integer.parseInt(rs.getString("idKlienta")),
		    				Integer.parseInt(rs.getString("idKsiazki")),
		    				rs.getString("dataWypozyczenia"),
		    				rs.getString("dataZwrotu"),
		    				rs.getString("dataBezKary"),
		    				Integer.parseInt(rs.getString("iloscPrzedluzen")),
		    				rs.getString("imie")+" "+rs.getString("nazwisko"),
		    				rs.getString("tytul"),
		    				Integer.parseInt(rs.getString("dniKary"))
		    			));
		    }
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return listaWypozyczen;
	}
	/**
	 * Funkcja wyszukiwania ksiazek w bazie danych
	 * @param param parametry zapytania SQL 
	 * 0-tytul, 1-autor, 2-dataWydania, 3-iloscStron, 4-isbn, 5-status, 6-fragment
	 * @return zwraca liste znalezionych ksiazek
	 */
	public List<Ksiazka> przegladajKsiegozbior(String[] param) {
		List<Ksiazka> listaKsiazek = new ArrayList<Ksiazka>();
		//odpowiednie zmodyfikowanie parametrow wyszukiwania, ktore sa Stringami
		if(param[0]==null || param[0].equals("")) {
			param[0]="%";
		} else {
			String tmp = "%"+param[0]+"%";
			//zabezpieczenie przed sql injection
			param[0] = Logowanie.slash(tmp);
		}
		if(param[1]==null || param[1].equals("")) {
			param[1]="%";
		} else {
			String tmp = "%"+param[1]+"%";
			//zabezpieczenie przed sql injection
			param[1] = Logowanie.slash(tmp);
		}
		if(param[4]==null || param[4].equals("")) {
			param[4]="%";
		} else {
			String tmp = "%"+param[4]+"%";
			//zabezpieczenie przed sql injection
			param[4] = Logowanie.slash(tmp);
		}
		if(param[6]==null || param[6].equals("")) {
			param[6]="%";
		} else {
			String tmp = "%"+param[6]+"%";
			//zabezpieczenie przed sql injection
			param[6] = Logowanie.slash(tmp);
		}
		//utworzenie zapytania z parametrami ktore sa Stringami
		String queryKsiazka = "SELECT * FROM Ksiazka WHERE "
				+"tytul LIKE '"+param[0]+"' AND "
				+"autor LIKE '"+param[1]+"' AND "
				+"isbn LIKE '"+param[4]+"' AND "
				+"fragment LIKE '"+param[6]+"' AND ";
		//dodawanie do zapytania parametrow, ktore nie sa Stringami
		if(param[2]==null || param[2].equals("")) {
			queryKsiazka += "dataWydania LIKE '%' AND ";
		} else {
			queryKsiazka += "dataWydania='"+Logowanie.slash(param[2])+"' AND ";
		}
		if(param[3]==null || param[3].equals("")) {
			queryKsiazka += "iloscStron LIKE '%' AND ";
		} else {
			queryKsiazka += "iloscStron="+Logowanie.slash(param[3])+" AND ";
		}
		if(param[5]==null || param[5].equals("")) {
			queryKsiazka += "status LIKE '%';";
		} else {
			queryKsiazka += "status=0;";
		}
		//laczenie z baza danych i wykonanie zapytania
		try {
			Class.forName("com.mysql.jdbc.Driver");
			Connection con = DriverManager.getConnection("jdbc:mysql://glass.elk.pl:3306/sql323890","mpigora","TTn9sez8cSXM6CNx");
			//Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/sql323890", "root", "");
			Statement stmt = con.createStatement();
		    ResultSet rs = stmt.executeQuery(queryKsiazka);
		    while (rs.next()) {
		    	listaKsiazek.add(new Ksiazka(
		    				Integer.parseInt(rs.getString("idKsiazki")),
		    				rs.getString("tytul"),
		    				rs.getString("autor"),
		    				rs.getString("dataWydania"),
		    				Integer.parseInt(rs.getString("iloscStron")),
		    				rs.getString("isbn"),
		    				rs.getString("status"),
		    				rs.getString("fragment")
		    			));
		    }
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
		return listaKsiazek;
	}
	/**
	 * Pobieranie imienia osoby
	 * @return imie osoby
	 */
	public String getImie() {
		return imie;
	}
	/**
	 * Pobieranie nazwiska osoby
	 * @return nazwisko osoby
	 */
	public String getNazwisko() {
		return nazwisko;
	}
	/**
	 * Pobieranie numeru pesel osoby
	 * @return numer pesel osoby
	 */
	public long getPesel() {
		return pesel;
	}
	/**
	 * Pobieranie uprawnien osoby
	 * @return uprawnienia osoby
	 */
	public long getPrawaDostepu() {
		return prawaDostepu;
	}
}